﻿#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//int main()
//{
//	//以写的方式打开test.txt文件
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		//若文件打开失败
//		perror(fopen);
//		return 1;
//	}
//	int i = 0;
//	for (int i = 'a'; i <= 'z'; i++)
//	{
//		fputc(i, pf);
//	}
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	//以读的方式打开文件
//	pf = fopen("test.txt", "r");
//	int ch = fgetc(pf);
//	printf("%c", ch);//a
//	//读完a后，文件中的光标来到b的位置，我希望跳过b，直接读c，则需要使文件中的光标来到c的位置
//	fseek(pf, 2, SEEK_SET);//文件中的光标从起始位置开始，向后偏移两个位置
//	//等价于fseek(pf, -24, SEEK_END); 文件中的光标从末尾开始，向前偏移24个位置
//	ch = fgetc(pf);
//	printf("%c", ch);//c
//	//此时文件中的光标来到d的位置
//	long int ret = ftell(pf);//计算光标当前的位置相对于文件起始位置的偏移量
//	printf("%ld\n", ret);//3
//	rewind(pf);//光标来到文件的起始位置
//	ch=fgetc(pf);
//	printf("%c", ch);//a
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int c; 
	FILE* fp = fopen("test.txt", "r");
	if (fp==NULL) {
		perror("fopen");
		return 1;
	}
	//当发生了读取错误或读取遇到⽂件末尾的时候，fgetc函数都会返回EOF
	while ((c = fgetc(fp)) != EOF) 
	{
		putchar(c);//打印c
	}
	//检测文件读取结束的原因
	if (ferror(fp) == 0)
		printf("发生了错误导致文件读取结束\n");
	else if (feof(fp)==0)
		printf("遇到⽂件末尾导致文件读取结束\n");
	fclose(fp);
	fp = NULL;
	return 0;
}